package TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

// 基于TCP的客户端
public class EchoClient {
    private Socket socket; //客户端套接字

    //构造方法，用于创建客户端套接字，参数为服务器的IP地址和端口号
    public EchoClient(String ip, int port) throws IOException {
        socket = new Socket(ip, port); //创建客户端套接字，连接到服务器
    }

    //启动客户端，接收用户输入的数据，发送给服务器，接收服务器的响应数据，打印到控制台
    public void start() throws IOException {
        System.out.println("client start!"); //打印客户端已启动的信息
        Scanner scanner = new Scanner(System.in); //创建输入流扫描器，用于接收用户输入的数据
        try(InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();
            Scanner in = new Scanner(inputStream); 
            PrintWriter out = new PrintWriter(outputStream, true)){
            
            while(true) { //循环接收用户输入的数据
                // 1.接收用户输入的数据
                System.out.print("> ");
                String request = scanner.next();
                // 2.把数据发送给服务器
                out.println(request);
                // 刷新输出流，确保数据立即发送给服务器!!!
                out.flush();
                // 3.接收服务器的响应数据
                if (!in.hasNext()) {
                    System.out.println("server disconnect");
                    break;
                }
                String response = in.next();
                // 4.打印服务器的响应数据
                System.out.println(response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        EchoClient echoClient = new EchoClient("127.0.0.1", 8080); //创建客户端对象，连接到服务器
        echoClient.start(); //启动客户端，接收用户输入的数据，发送给服务器，接收服务器的响应数据，打印到控制台
    }
}
